iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
自我挑戰組

用數據守護雙眼:生活型態對視力影響的探索性資料分析系列 第 13 篇

多變數交互作用!睡眠不足是否會加劇高螢幕暴露的眼部不適?

  • 分享至 

  • xImage
  •  

透過特徵工程將連續變數離散化切箱,並繪製「雙因子交互作用熱力圖(Interaction Heatmap)」與「多維度散佈圖」,清楚解鎖作息與用眼的交互影響。

一、實作前情境:單因子看不出端倪,複合因子才見真章?
在前面的分析中,我們發現了兩個耐人尋味的統計事實:

  • 單看「每日螢幕時數」,與眼部症狀的皮爾森相關係數接近 0(r ≈ 0.01)。
  • 單看「每日睡眠時數」,與眼部症狀的相關係數同樣接近 0(r ≈ -0.03)。

然而在生理醫學與臨床經驗中,「睡眠不足」常被視為降低人體自我修復能力的元凶。
當睫狀肌經過整日高強度螢幕注視後,若夜晚睡眠充足,眼球表面微血管與淚膜屏障通常能獲得一定程度的恢復;反之,若在「長時間螢幕暴露」的同時又伴隨「嚴重睡眠剝奪」,是否才會觸發顯著的疼痛與疲勞閥值?

這就是典型的交互作用。今天我們利用資料切箱技術,將受試者劃分成不同作息矩陣,探討這兩大生活因子組合下的真實症狀走勢。

二、撰寫多變數交互作用視覺化腳本
在Colab中新增儲存格,建立資料切箱分組,並繪製雙因子交互作用熱力圖:

# ==========================================
# Day 13:交互作用熱力圖
# ==========================================

import warnings
warnings.filterwarnings('ignore') # 徹底靜音 Matplotlib 內部的字型量測警告

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
import pandas as pd
import numpy as np

# 1. 引用中文字型
font_path = 'NotoSansTC-Regular.otf'
my_font = fm.FontProperties(fname=font_path)

# 2. 特徵工程:分箱切片 (Binning)
df['Screen_Group'] = pd.cut(
    df['Daily_Screen_Hours'],
    bins=[0, 6, 10, 16],
    labels=['輕度暴露 (<6h)', '中度暴露 (6-10h)', '重度暴露 (>10h)']
)

df['Sleep_Group'] = pd.cut(
    df['Sleep_Hours'],
    bins=[0, 5, 7, 12],
    labels=['睡眠不足 (≤5h)', '睡眠適中 (5-7h)', '睡眠充足 (>7h)']
)

# 3. 樞紐分析(observed=False 消除警告)
pivot_dryness = df.pivot_table(
    index='Sleep_Group', 
    columns='Screen_Group', 
    values='Eye_Dryness_Level', 
    aggfunc='mean',
    observed=False
)

pivot_pain = df.pivot_table(
    index='Sleep_Group', 
    columns='Screen_Group', 
    values='Eye_Pain_Level', 
    aggfunc='mean',
    observed=False
)

# 4. 繪製 1x2 交互作用熱力圖
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
sns.set_theme(style="white")

# --- 圖 1:乾澀程度交互影響 ---
ax1 = sns.heatmap(
    pivot_dryness, 
    annot=True, 
    fmt=".2f", 
    cmap='YlGnBu', 
    cbar_kws={'label': '平均乾澀分數 (0-10)'},
    ax=axes[0]
)
axes[0].set_title('睡眠時數 × 螢幕時數 對 眼睛乾澀 的交互影響', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[0].set_xlabel('螢幕使用時數分組', fontproperties=my_font, fontsize=12)
axes[0].set_ylabel('每日睡眠長度分組', fontproperties=my_font, fontsize=12)
axes[0].set_xticklabels(axes[0].get_xticklabels(), fontproperties=my_font, fontsize=11)
axes[0].set_yticklabels(axes[0].get_yticklabels(), fontproperties=my_font, fontsize=11)
ax1.collections[0].colorbar.set_label('平均乾澀分數 (0-10)', fontproperties=my_font, fontsize=11)

# --- 圖 2:眼痛程度交互影響 ---
ax2 = sns.heatmap(
    pivot_pain, 
    annot=True, 
    fmt=".2f", 
    cmap='OrRd', 
    cbar_kws={'label': '平均眼痛分數 (0-10)'},
    ax=axes[1]
)
axes[1].set_title('睡眠時數 × 螢幕時數 對 眼痛程度 的交互影響', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[1].set_xlabel('螢幕使用時數分組', fontproperties=my_font, fontsize=12)
axes[1].set_ylabel('每日睡眠長度分組', fontproperties=my_font, fontsize=12)
axes[1].set_xticklabels(axes[1].get_xticklabels(), fontproperties=my_font, fontsize=11)
axes[1].set_yticklabels(axes[1].get_yticklabels(), fontproperties=my_font, fontsize=11)
ax2.collections[0].colorbar.set_label('平均眼痛分數 (0-10)', fontproperties=my_font, fontsize=11)

plt.tight_layout()
plt.show()

# 5. 輸出 9 宮格樣本分佈
sample_counts = df.pivot_table(
    index='Sleep_Group', 
    columns='Screen_Group', 
    values='Age', 
    aggfunc='count',
    observed=False
)
print("=== 9 宮格交叉樣本數分佈表 ===")
display(sample_counts)

https://ithelp.ithome.com.tw/upload/images/20260928/201787940JQxg9KB9x.png

三、圖表解讀與客觀數據分析(正式定稿)
本實作透過 pd.cut 將連續數值離散化為「3×3九宮格作息矩陣」,成功揭示了單一特徵線性分析無法捕捉的多變數交互作用:

  1. 作息矩陣樣本分佈均衡(資料穩健性驗證)
    (a)樣本覆蓋度:9 個作息宮格之樣本數分佈介於34至72人之間。
  • 最少組別為「睡眠不足+輕度暴露」(34人),最多組別為「睡眠適中+輕度暴露」(72 人),重度暴露組(>10h)各子群體亦具備 36 至 64 人。
    (b)統計意涵:各區塊樣本規模充足且權重均衡,能排除少數極端離群值拉偏平均分數的可能,統計結果具備高信賴度。
  1. 眼痛程度(Eye_Pain_Level):睡眠不足顯著加乘螢幕暴露的疼痛惡化效應觀察右側紅色系熱力圖,呈現了極具臨床說服力的階梯式惡化趨勢:
    (a)「睡眠不足組(≤5h)」的惡化階梯:
  • 輕度暴露(<6h):平均眼痛5.06分。
  • 中度暴露(6-10h):平均眼痛上升至 5.49 分。
  • 重度暴露(>10h):平均眼痛進一步飆升至5.58分,為全場9宮格的最高疼痛極值(對應最深暗紅色宮格)。
    (b)「睡眠充足組(>7h)」的生理緩衝效益:
  • 在「重度暴露(>10h)」的極端用眼情境下,若受試者維持充足睡眠(>7h),平均眼痛評分反而降至4.66分,顯著低於睡眠不足組的5.58分(降幅達0.92分)。
    (c)實質意涵:先前線性相關分析顯示螢幕時數與眼痛幾乎無關(r≈0.001),但納入睡眠維度後證實:螢幕長時間暴露並非獨立致痛,而是在「生理修復受限(睡眠不足)」的條件下,疼痛效應才會被大幅度放大;充足睡眠則對高工時造成的睫狀肌疲勞提供了關鍵的保護緩衝屏障。
  1. 眼睛乾澀程度(Eye_Dryness_Level):呈現非線性多因干擾態樣觀察左側藍色系熱力圖,乾澀指標的變化軌跡與眼痛存在生理機轉上的差異:
    (a)數值區間:全矩陣平均乾澀分數介於4.12至5.20分之間。
    (b)極端分佈點:
  • 最低乾澀出現在「睡眠不足+輕度暴露」(4.12 分)與「睡眠不足+中度暴露」(4.20分)。
  • 最高乾澀落在「睡眠適中(5-7h)+重度暴露(>10h)」的 5.20分(最深深藍色宮格),以及「睡眠適中(5-7h)+輕度暴露(<6h)」的5.00分。
    (c)實質意涵:
    與反映神經肌肉疲勞的眼痛不同,眼球表面乾澀更直接受到瞬間專注度、眨眼頻率、空調環境濕度與淚液分泌穩定度等物理因子影響。因此在矩陣中未呈現如眼痛般的單調線性遞增,但「重度暴露(>10h)」在不同睡眠群體中普遍維持在4.58~5.20分的中高乾澀水平。

上一篇
校園 vs 職場生態!學生與專業人士的用眼型態與風險橫向對比
下一篇
視力警訊大盤點!出現「視力模糊」的受試者具備哪些危險特徵?
系列文
用數據守護雙眼:生活型態對視力影響的探索性資料分析 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言